export {}

/* 
  元组（tuple）
    - 元组是一个特殊的数组
    - 使用元组时可以为每个元素分别指定类型，同时可以限制元素的数量
    - 除了数量固定，类型分别指定外，元组和数组使用的方式是一样
    - 元组适用于强约定的API
*/

let tuple: [string, number] = ["helo", 123]

function fn(person: [string, number, string]) {}

function fn2() {
  return [() => {}, true, false, null]
}

function fn3(a: string, b: number, ...args: [string, number, boolean]) {}

let tuple2: readonly [string, number] = ["helo", 123]

/* 
  元组也支持可选元素和可变元素
*/
let tuple3: [string, number?] = ["hello", 123]

let tuple4: [string, number, ...boolean[]] = ["aaa", 123, true, false, true]
let tuple5: [string, ...boolean[], number] = ["aaa", true, false, true, 123]
let tuple6: [...boolean[], string, number] = [true, false, true, "aaa", 123]

console.log(tuple4[5])
